package com.zeus.core.rule;

import com.zeus.common.enums.ZeusAlarmLevelEnum;

/**
 * 聚合规则
 *
 * @author f1ybear_wang  2022/3/3 3:10 下午
 */
public interface GatherRule {

    /**
     * 添加统计次数
     *
     * @author f1ybear_wang  2022/3/3 4:44 下午
     */
    void addCount();

    /**
     * 获取统计次数
     *
     * @return 发生次数
     * @author f1ybear_wang  2022/3/3 4:44 下午
     */
    int getCount();

    /**
     * 持续时间
     *
     * @return 毫秒
     * @author f1ybear_wang  2022/3/3 4:44 下午
     */
    long continueTime();

    /**
     * 添加任务之前，做一些事情
     *
     * @author f1ybear_wang  2022/3/3 3:12 下午
     */
    void addTaskBefore();

    /**
     * 添加任务之后，做一些事情
     *
     * @author f1ybear_wang  2022/3/3 3:12 下午
     */
    void addTaskAfter();

    /**
     * 是否可以发送报告
     *
     * @return true:可发送 false:不可以发送
     * @author f1ybear_wang  2022/3/3 3:12 下午
     */
    boolean isCanSendReport();

    /**
     * 是否超时
     *
     * @return true:超时 false:未超时
     * @author f1ybear_wang  2022/3/3 3:12 下午
     */
    boolean isTimeout();

    /**
     * 获取发送失败次数
     *
     * @return 发送失败次数
     * @author f1ybear_wang  2022/3/3 4:30 下午
     */
    int getSendFailCount();

    /**
     * 获取报警级别
     *
     * @return 报警级别
     * @author f1ybear_wang  2022/3/3 4:32 下午
     */
    ZeusAlarmLevelEnum alarmLevel();

    /**
     * 设置报警等级
     *
     * @param alarmLevel 报警等级
     * @author f1ybear_wang  2022/3/3 6:39 下午
     */
    void setAlarmLevel(ZeusAlarmLevelEnum alarmLevel);

    /**
     * 设置报警等级
     * 
     * @param keyWorlds 关键词
     * @author f1ybear_wang  2022/3/3 6:41 下午
     */
    void setAlarmLevel(String... keyWorlds);

    /**
     * 发送消息成功
     *
     * @author f1ybear_wang  2022/3/3 4:32 下午
     */
    void sendMessageSuccess();

    /**
     * 发送消息失败
     *
     * @author f1ybear_wang  2022/3/3 4:32 下午
     */
    void sendMessageFail();

}
